using System;

namespace OracleInternal.Secure.Network
{
	internal class AES : EncryptionAlgorithm
	{
		internal new class Aes_a
		{
			private uint[][] m_a;

			private uint[][] m_b;

			internal byte field_c;

			internal byte[] field_d;

			internal AES field_e;

			internal Aes_a(AES A_0)
			{
				field_e = A_0;
			}

			internal byte[] a(byte[] A_0, int A_1 = -1)
			{
				if (A_0 == null)
				{
					return null;
				}
				if (A_0.Length == 0)
				{
					return new byte[0];
				}
				int num = ((A_1 == -1) ? A_0.Length : A_1);
				byte[] array = null;
				int num2 = 0;
				if (!field_e.field_n)
				{
					if ((num - 1) % 16 != 0)
					{
						throw new Exception("INVALID_PADDING_FROM_CIPHERTEXT");
					}
					byte b = A_0[num - 1];
					if (b < 0 || b > 16)
					{
						throw new Exception("INVALID_PADDING_FROM_CIPHERTEXT");
					}
					if (field_e.field_h == 1)
					{
						field_d = new byte[16];
					}
					array = new byte[num - b];
					num2 = 1;
				}
				else
				{
					array = new byte[num];
				}
				byte[] array2 = new byte[16];
				byte[] array3 = new byte[16];
				for (int i = 0; i < num - num2; i += 16)
				{
					Array.Copy(A_0, i, array2, 0, 16);
					a(array2, array3);
					if (field_e.field_h == 1)
					{
						for (int j = 0; j < 16; j++)
						{
							array3[j] = (byte)(field_d[j] ^ array3[j]);
						}
						Array.Copy(array2, 0, field_d, 0, 16);
					}
					if (i == num - num2 - 16)
					{
						Array.Copy(array3, 0, array, i, array.Length - i);
					}
					else
					{
						Array.Copy(array3, 0, array, i, 16);
					}
				}
				return array;
			}

			internal byte[] b(byte[] A_0, int A_1 = -1)
			{
				if (A_0 == null)
				{
					return null;
				}
				if (A_0.Length == 0)
				{
					return new byte[0];
				}
				int num = ((A_1 == -1) ? A_0.Length : A_1);
				int num2 = 0;
				int num3 = 0;
				byte[] array;
				if (!field_e.field_n)
				{
					num2 = ((num % 16 != 0) ? (16 - num % 16) : 0);
					num3 = num + num2;
					array = new byte[num3 + 1];
					if (field_e.field_h == 1)
					{
						field_d = new byte[16];
					}
				}
				else
				{
					array = new byte[num];
				}
				byte[] array2 = new byte[16];
				byte[] array3 = new byte[16];
				for (int i = 0; i < num; i += 16)
				{
					for (int j = 0; j < 16; j++)
					{
						array3[j] = 0;
					}
					if (i + 16 <= num)
					{
						Array.Copy(A_0, i, array3, 0, 16);
					}
					else
					{
						Array.Copy(A_0, i, array3, 0, num - i);
					}
					if (field_e.field_h == 1)
					{
						for (int k = 0; k < 16; k++)
						{
							array3[k] = (byte)(field_d[k] ^ array3[k]);
						}
					}
					b(array3, array2);
					if (field_e.field_h == 1)
					{
						Array.Copy(array2, 0, field_d, 0, 16);
					}
					Array.Copy(array2, 0, array, i, 16);
				}
				if (!field_e.field_n)
				{
					array[num3] = (byte)(num2 + 1);
				}
				return array;
			}

			public int a()
			{
				return 16;
			}

			internal void a(byte[] A_0)
			{
				byte b = 0;
				byte[][] array = new byte[A_0.Length / 4 + b][];
				for (int i = 0; i < A_0.Length / 4 + b; i++)
				{
					array[i] = new byte[4];
				}
				if (b != 0)
				{
					array[0][0] = 82;
					array[0][1] = 78;
					array[0][2] = 68;
					array[0][3] = 76;
				}
				byte b2 = 0;
				byte b3 = b;
				while (b2 < A_0.Length)
				{
					array[b3][0] = A_0[b2];
					array[b3][1] = A_0[b2 + 1];
					array[b3][2] = A_0[b2 + 2];
					array[b3][3] = A_0[b2 + 3];
					b2 = (byte)(b2 + 4);
					b3 = (byte)(b3 + 1);
				}
				byte b4 = b3;
				field_c = (byte)(b4 + 6);
				byte b5 = (b3 = 0);
				this.m_a = new uint[field_c + 1][];
				this.m_b = new uint[field_c + 1][];
				for (int j = 0; j < field_c + 1; j++)
				{
					this.m_a[j] = new uint[4];
					this.m_b[j] = new uint[4];
				}
				b2 = 0;
				while (b2 < b4 && b5 < field_c + 1)
				{
					while (b2 < b4 && b3 < 4)
					{
						this.m_b[b5][b3] = (this.m_a[b5][b3] = AES.a(array, (int)b2));
						b2 = (byte)(b2 + 1);
						b3 = (byte)(b3 + 1);
					}
					if (b3 == 4)
					{
						b5 = (byte)(b5 + 1);
						b3 = 0;
					}
				}
				byte b6 = 0;
				while (b5 < field_c + 1)
				{
					array[0][0] ^= field_u[0xFF & array[b4 - 1][1]];
					array[0][1] ^= field_u[0xFF & array[b4 - 1][2]];
					array[0][2] ^= field_u[0xFF & array[b4 - 1][3]];
					array[0][3] ^= field_u[0xFF & array[b4 - 1][0]];
					array[0][0] ^= field_v[b6++];
					AES.a(array, 1, AES.a(array, 1) ^ AES.a(array, 0));
					AES.a(array, 2, AES.a(array, 2) ^ AES.a(array, 1));
					AES.a(array, 3, AES.a(array, 3) ^ AES.a(array, 2));
					switch (b4)
					{
					case 8:
						array[4][0] ^= field_u[0xFF & array[3][0]];
						array[4][1] ^= field_u[0xFF & array[3][1]];
						array[4][2] ^= field_u[0xFF & array[3][2]];
						array[4][3] ^= field_u[0xFF & array[3][3]];
						AES.a(array, 5, AES.a(array, 5) ^ AES.a(array, 4));
						AES.a(array, 6, AES.a(array, 6) ^ AES.a(array, 5));
						AES.a(array, 7, AES.a(array, 7) ^ AES.a(array, 6));
						break;
					case 6:
						AES.a(array, 4, AES.a(array, 4) ^ AES.a(array, 3));
						AES.a(array, 5, AES.a(array, 5) ^ AES.a(array, 4));
						break;
					default:
						throw new Exception("KEY_IS_TOO_SMALL");
					case 4:
						break;
					}
					b2 = 0;
					while (b2 < b4 && b5 < field_c + 1)
					{
						while (b2 < b4 && b3 < 4)
						{
							this.m_b[b5][b3] = (this.m_a[b5][b3] = AES.a(array, (int)b2));
							b2 = (byte)(b2 + 1);
							b3 = (byte)(b3 + 1);
						}
						if (b3 == 4)
						{
							b5 = (byte)(b5 + 1);
							b3 = 0;
						}
					}
				}
				for (b5 = 1; b5 < field_c; b5 = (byte)(b5 + 1))
				{
					for (b2 = 0; b2 < 4; b2 = (byte)(b2 + 1))
					{
						uint a_ = this.m_b[b5][b2];
						this.m_b[b5][b2] = field_w[AES.a(a_, 0)] ^ field_x[AES.a(a_, 1)] ^ field_y[AES.a(a_, 2)] ^ field_z[AES.a(a_, 3)];
					}
				}
			}

			private void b(byte[] A_0, byte[] A_1)
			{
				int num = 0;
				uint[] array = new uint[4];
				for (int i = 0; i < array.Length; i++)
				{
					array[i] = AES.a(A_0, i);
				}
				uint[] array2 = new uint[array.Length];
				for (num = 0; num < field_c - 2; num += 2)
				{
					array2[0] = array[0] ^ this.m_a[num][0];
					array2[1] = array[1] ^ this.m_a[num][1];
					array2[2] = array[2] ^ this.m_a[num][2];
					array2[3] = array[3] ^ this.m_a[num][3];
					array[0] = aa[AES.a(array2[0], 0)] ^ ab[AES.a(array2[1], 1)] ^ ac[AES.a(array2[2], 2)] ^ ad[AES.a(array2[3], 3)];
					array[1] = aa[AES.a(array2[1], 0)] ^ ab[AES.a(array2[2], 1)] ^ ac[AES.a(array2[3], 2)] ^ ad[AES.a(array2[0], 3)];
					array[2] = aa[AES.a(array2[2], 0)] ^ ab[AES.a(array2[3], 1)] ^ ac[AES.a(array2[0], 2)] ^ ad[AES.a(array2[1], 3)];
					array[3] = aa[AES.a(array2[3], 0)] ^ ab[AES.a(array2[0], 1)] ^ ac[AES.a(array2[1], 2)] ^ ad[AES.a(array2[2], 3)];
					array2[0] = array[0] ^ this.m_a[num + 1][0];
					array2[1] = array[1] ^ this.m_a[num + 1][1];
					array2[2] = array[2] ^ this.m_a[num + 1][2];
					array2[3] = array[3] ^ this.m_a[num + 1][3];
					array[0] = aa[AES.a(array2[0], 0)] ^ ab[AES.a(array2[1], 1)] ^ ac[AES.a(array2[2], 2)] ^ ad[AES.a(array2[3], 3)];
					array[1] = aa[AES.a(array2[1], 0)] ^ ab[AES.a(array2[2], 1)] ^ ac[AES.a(array2[3], 2)] ^ ad[AES.a(array2[0], 3)];
					array[2] = aa[AES.a(array2[2], 0)] ^ ab[AES.a(array2[3], 1)] ^ ac[AES.a(array2[0], 2)] ^ ad[AES.a(array2[1], 3)];
					array[3] = aa[AES.a(array2[3], 0)] ^ ab[AES.a(array2[0], 1)] ^ ac[AES.a(array2[1], 2)] ^ ad[AES.a(array2[2], 3)];
				}
				array2[0] = array[0] ^ this.m_a[field_c - 2][0];
				array2[1] = array[1] ^ this.m_a[field_c - 2][1];
				array2[2] = array[2] ^ this.m_a[field_c - 2][2];
				array2[3] = array[3] ^ this.m_a[field_c - 2][3];
				array[0] = aa[AES.a(array2[0], 0)] ^ ab[AES.a(array2[1], 1)] ^ ac[AES.a(array2[2], 2)] ^ ad[AES.a(array2[3], 3)];
				array[1] = aa[AES.a(array2[1], 0)] ^ ab[AES.a(array2[2], 1)] ^ ac[AES.a(array2[3], 2)] ^ ad[AES.a(array2[0], 3)];
				array[2] = aa[AES.a(array2[2], 0)] ^ ab[AES.a(array2[3], 1)] ^ ac[AES.a(array2[0], 2)] ^ ad[AES.a(array2[1], 3)];
				array[3] = aa[AES.a(array2[3], 0)] ^ ab[AES.a(array2[0], 1)] ^ ac[AES.a(array2[1], 2)] ^ ad[AES.a(array2[2], 3)];
				array2[0] = array[0] ^ this.m_a[field_c - 1][0];
				array2[1] = array[1] ^ this.m_a[field_c - 1][1];
				array2[2] = array[2] ^ this.m_a[field_c - 1][2];
				array2[3] = array[3] ^ this.m_a[field_c - 1][3];
				A_1[0] = (byte)(ai[AES.a(array2[0], 0)] ^ AES.a(this.m_a[field_c][0], 0));
				A_1[1] = (byte)(ai[AES.a(array2[1], 1)] ^ AES.a(this.m_a[field_c][0], 1));
				A_1[2] = (byte)(ai[AES.a(array2[2], 2)] ^ AES.a(this.m_a[field_c][0], 2));
				A_1[3] = (byte)(ai[AES.a(array2[3], 3)] ^ AES.a(this.m_a[field_c][0], 3));
				A_1[4] = (byte)(ai[AES.a(array2[1], 0)] ^ AES.a(this.m_a[field_c][1], 0));
				A_1[5] = (byte)(ai[AES.a(array2[2], 1)] ^ AES.a(this.m_a[field_c][1], 1));
				A_1[6] = (byte)(ai[AES.a(array2[3], 2)] ^ AES.a(this.m_a[field_c][1], 2));
				A_1[7] = (byte)(ai[AES.a(array2[0], 3)] ^ AES.a(this.m_a[field_c][1], 3));
				A_1[8] = (byte)(ai[AES.a(array2[2], 0)] ^ AES.a(this.m_a[field_c][2], 0));
				A_1[9] = (byte)(ai[AES.a(array2[3], 1)] ^ AES.a(this.m_a[field_c][2], 1));
				A_1[10] = (byte)(ai[AES.a(array2[0], 2)] ^ AES.a(this.m_a[field_c][2], 2));
				A_1[11] = (byte)(ai[AES.a(array2[1], 3)] ^ AES.a(this.m_a[field_c][2], 3));
				A_1[12] = (byte)(ai[AES.a(array2[3], 0)] ^ AES.a(this.m_a[field_c][3], 0));
				A_1[13] = (byte)(ai[AES.a(array2[0], 1)] ^ AES.a(this.m_a[field_c][3], 1));
				A_1[14] = (byte)(ai[AES.a(array2[1], 2)] ^ AES.a(this.m_a[field_c][3], 2));
				A_1[15] = (byte)(ai[AES.a(array2[2], 3)] ^ AES.a(this.m_a[field_c][3], 3));
			}

			private void a(byte[] A_0, byte[] A_1)
			{
				byte b = 0;
				uint[] array = new uint[4];
				for (int i = 0; i < array.Length; i++)
				{
					array[i] = AES.a(A_0, i);
				}
				uint[] array2 = new uint[array.Length];
				for (b = field_c; b > 2; b = (byte)(b - 2))
				{
					array2[0] = array[0] ^ this.m_b[b][0];
					array2[1] = array[1] ^ this.m_b[b][1];
					array2[2] = array[2] ^ this.m_b[b][2];
					array2[3] = array[3] ^ this.m_b[b][3];
					array[0] = ae[AES.a(array2[0], 0)] ^ af[AES.a(array2[3], 1)] ^ ag[AES.a(array2[2], 2)] ^ ah[AES.a(array2[1], 3)];
					array[1] = ae[AES.a(array2[1], 0)] ^ af[AES.a(array2[0], 1)] ^ ag[AES.a(array2[3], 2)] ^ ah[AES.a(array2[2], 3)];
					array[2] = ae[AES.a(array2[2], 0)] ^ af[AES.a(array2[1], 1)] ^ ag[AES.a(array2[0], 2)] ^ ah[AES.a(array2[3], 3)];
					array[3] = ae[AES.a(array2[3], 0)] ^ af[AES.a(array2[2], 1)] ^ ag[AES.a(array2[1], 2)] ^ ah[AES.a(array2[0], 3)];
					array2[0] = array[0] ^ this.m_b[b - 1][0];
					array2[1] = array[1] ^ this.m_b[b - 1][1];
					array2[2] = array[2] ^ this.m_b[b - 1][2];
					array2[3] = array[3] ^ this.m_b[b - 1][3];
					array[0] = ae[AES.a(array2[0], 0)] ^ af[AES.a(array2[3], 1)] ^ ag[AES.a(array2[2], 2)] ^ ah[AES.a(array2[1], 3)];
					array[1] = ae[AES.a(array2[1], 0)] ^ af[AES.a(array2[0], 1)] ^ ag[AES.a(array2[3], 2)] ^ ah[AES.a(array2[2], 3)];
					array[2] = ae[AES.a(array2[2], 0)] ^ af[AES.a(array2[1], 1)] ^ ag[AES.a(array2[0], 2)] ^ ah[AES.a(array2[3], 3)];
					array[3] = ae[AES.a(array2[3], 0)] ^ af[AES.a(array2[2], 1)] ^ ag[AES.a(array2[1], 2)] ^ ah[AES.a(array2[0], 3)];
				}
				array2[0] = array[0] ^ this.m_b[2][0];
				array2[1] = array[1] ^ this.m_b[2][1];
				array2[2] = array[2] ^ this.m_b[2][2];
				array2[3] = array[3] ^ this.m_b[2][3];
				array[0] = ae[AES.a(array2[0], 0)] ^ af[AES.a(array2[3], 1)] ^ ag[AES.a(array2[2], 2)] ^ ah[AES.a(array2[1], 3)];
				array[1] = ae[AES.a(array2[1], 0)] ^ af[AES.a(array2[0], 1)] ^ ag[AES.a(array2[3], 2)] ^ ah[AES.a(array2[2], 3)];
				array[2] = ae[AES.a(array2[2], 0)] ^ af[AES.a(array2[1], 1)] ^ ag[AES.a(array2[0], 2)] ^ ah[AES.a(array2[3], 3)];
				array[3] = ae[AES.a(array2[3], 0)] ^ af[AES.a(array2[2], 1)] ^ ag[AES.a(array2[1], 2)] ^ ah[AES.a(array2[0], 3)];
				array2[0] = array[0] ^ this.m_b[1][0];
				array2[1] = array[1] ^ this.m_b[1][1];
				array2[2] = array[2] ^ this.m_b[1][2];
				array2[3] = array[3] ^ this.m_b[1][3];
				A_1[0] = (byte)(aj[AES.a(array2[0], 0)] ^ AES.a(this.m_b[0][0], 0));
				A_1[1] = (byte)(aj[AES.a(array2[3], 1)] ^ AES.a(this.m_b[0][0], 1));
				A_1[2] = (byte)(aj[AES.a(array2[2], 2)] ^ AES.a(this.m_b[0][0], 2));
				A_1[3] = (byte)(aj[AES.a(array2[1], 3)] ^ AES.a(this.m_b[0][0], 3));
				A_1[4] = (byte)(aj[AES.a(array2[1], 0)] ^ AES.a(this.m_b[0][1], 0));
				A_1[5] = (byte)(aj[AES.a(array2[0], 1)] ^ AES.a(this.m_b[0][1], 1));
				A_1[6] = (byte)(aj[AES.a(array2[3], 2)] ^ AES.a(this.m_b[0][1], 2));
				A_1[7] = (byte)(aj[AES.a(array2[2], 3)] ^ AES.a(this.m_b[0][1], 3));
				A_1[8] = (byte)(aj[AES.a(array2[2], 0)] ^ AES.a(this.m_b[0][2], 0));
				A_1[9] = (byte)(aj[AES.a(array2[1], 1)] ^ AES.a(this.m_b[0][2], 1));
				A_1[10] = (byte)(aj[AES.a(array2[0], 2)] ^ AES.a(this.m_b[0][2], 2));
				A_1[11] = (byte)(aj[AES.a(array2[3], 3)] ^ AES.a(this.m_b[0][2], 3));
				A_1[12] = (byte)(aj[AES.a(array2[3], 0)] ^ AES.a(this.m_b[0][3], 0));
				A_1[13] = (byte)(aj[AES.a(array2[2], 1)] ^ AES.a(this.m_b[0][3], 1));
				A_1[14] = (byte)(aj[AES.a(array2[1], 2)] ^ AES.a(this.m_b[0][3], 2));
				A_1[15] = (byte)(aj[AES.a(array2[0], 3)] ^ AES.a(this.m_b[0][3], 3));
			}
		}

		internal new const int field_a = 16;

		internal const int field_b = 16;

		internal const int field_c = 24;

		internal const int field_d = 32;

		internal const int AES_128 = 1;

		internal const int AES_192 = 2;

		internal const int AES_256 = 3;

		internal const int MODE_CBC = 1;

		internal const int field_e = 2;

		protected internal const byte field_f = 1;

		protected internal const byte field_g = 2;

		internal int field_h = 1;

		internal int field_i = 1;

		internal const byte field_j = byte.MaxValue;

		internal const int field_k = 180;

		internal const int field_l = 90;

		internal bool field_m = true;

		internal bool field_n;

		internal int field_o;

		internal int field_p;

		private Aes_a field_q;

		private Aes_a field_r;

		private Aes_a field_s;

		internal byte[] field_t;

		internal static byte[] field_u;

		internal static byte[] field_v;

		internal static uint[] field_w;

		internal static uint[] field_x;

		internal static uint[] field_y;

		internal static uint[] field_z;

		private static uint[] aa;

		private static uint[] ab;

		private static uint[] ac;

		private static uint[] ad;

		private static uint[] ae;

		private static uint[] af;

		private static uint[] ag;

		private static uint[] ah;

		private static byte[] ai;

		private static byte[] aj;

		public AES(int A_0, int A_1)
		{
			field_h = A_0;
			field_i = A_1;
		}

		public AES(int A_0, int A_1, int A_2, byte[] A_3, byte[] A_4, bool A_5)
		{
			this.field_h = A_0;
			this.field_i = A_1;
			field_o = A_2;
			field_n = A_5;
			field_m = false;
			setSessionKey(A_3, A_4);
		}

		public override void init(byte[] key, byte[] _iv)
		{
			if (this.field_i == 1)
			{
				field_p = 16;
			}
			else if (this.field_i == 2)
			{
				field_p = 24;
			}
			else if (this.field_i == 3)
			{
				field_p = 32;
			}
			byte[] array = new byte[field_p];
			field_t = new byte[32];
			if (key.Length >= field_p)
			{
				field_q = new Aes_a(this);
				field_r = new Aes_a(this);
				field_s = new Aes_a(this);
				if (field_n)
				{
					if (_iv != null)
					{
						field_q.field_d = new byte[16];
						Array.Copy(_iv, 0, field_q.field_d, 0, 16);
					}
					Array.Copy(key, 0, array, 0, field_o);
					array[field_o] = byte.MaxValue;
					field_q.a(array);
					renewKey();
				}
				else
				{
					Array.Copy(key, 0, array, 0, field_p);
					field_q.a(array);
					field_s.a(array);
					field_r.a(array);
				}
				return;
			}
			throw new Exception("KEY_IS_TOO_SMALL");
		}

		public void renewKey()
		{
			if (field_n)
			{
				byte[] array = null;
				array = (field_t = field_q.b(field_t));
				field_q = new Aes_a(this);
				field_q.field_d = new byte[16];
				byte[] array2 = new byte[field_p];
				Buffer.BlockCopy(array, 0, array2, 0, field_p);
				Buffer.BlockCopy(array, field_p, field_q.field_d, 0, 16);
				field_q.a(array2);
				byte[] array3 = new byte[field_p];
				Array.Copy(array, 0, array3, 0, field_p);
				array3[field_o] = 180;
				field_s.field_d = new byte[16];
				Array.Copy(array, field_p, field_s.field_d, 0, 16);
				field_s.a(array3);
				byte[] array4 = new byte[field_p];
				Array.Copy(array, 0, array4, 0, field_p);
				field_r.field_d = new byte[16];
				Array.Copy(array, field_p, field_r.field_d, 0, 16);
				array4[field_o] = 90;
				field_r.a(array4);
			}
		}

		public override void setSessionKey(byte[] key, byte[] iv)
		{
			if (key != null && iv != null)
			{
				init(key, iv);
			}
		}

		public override byte[] decrypt(byte[] ebuffer)
		{
			return field_s.a(ebuffer, -1);
		}

		public override byte[] decrypt(byte[] ebuffer, int length)
		{
			return field_s.a(ebuffer, length);
		}

		public override byte[] encrypt(byte[] buffer)
		{
			return field_r.b(buffer);
		}

		public override byte[] encrypt(byte[] buffer, int length)
		{
			return field_r.b(buffer, length);
		}

		public byte[] encrypt(byte[] buffer, byte context)
		{
			if (context == 2)
			{
				return field_r.b(buffer);
			}
			return field_s.b(buffer);
		}

		public override int maxDelta()
		{
			return 16;
		}

		private new static void a(byte[][] A_0, int A_1, uint A_2)
		{
			byte[] obj = A_0[A_1];
			byte[] obj2 = A_0[A_1];
			byte b;
			A_0[A_1][2] = (b = (A_0[A_1][3] = 0));
			obj2[1] = (b = b);
			obj[0] = b;
			if (A_2 != 0)
			{
				A_0[A_1][3] = (byte)(A_2 & 0xFFu);
				A_2 >>= 8;
				A_0[A_1][2] = (byte)(A_2 & 0xFFu);
				A_2 >>= 8;
				A_0[A_1][1] = (byte)(A_2 & 0xFFu);
				A_2 >>= 8;
				A_0[A_1][0] = (byte)(A_2 & 0xFFu);
			}
		}

		private new static uint a(byte[][] A_0, int A_1)
		{
			return a(A_0[A_1], 0);
		}

		private new static uint a(byte[] A_0, int A_1)
		{
			A_1 *= 4;
			return (uint)(((A_0[A_1] << 24) & 0xFF000000u) | (int)((uint)(A_0[A_1 + 1] << 16) & 0xFF0000u) | (int)((uint)(A_0[A_1 + 2] << 8) & 0xFF00u) | (int)(A_0[A_1 + 3] & 0xFFu));
		}

		private new static uint a(uint A_0, int A_1)
		{
			if (A_0 == 0)
			{
				return 0u;
			}
			if (A_1 == 3)
			{
				return A_0 & 0xFFu;
			}
			return (A_0 >> (3 - A_1) * 8) & 0xFFu;
		}

		static AES()
		{
			field_u = new byte[256]
			{
				99,
				124,
				119,
				123,
				242,
				107,
				111,
				197,
				48,
				1,
				103,
				43,
				254,
				215,
				171,
				118,
				202,
				130,
				201,
				125,
				250,
				89,
				71,
				240,
				173,
				212,
				162,
				175,
				156,
				164,
				114,
				192,
				183,
				253,
				147,
				38,
				54,
				63,
				247,
				204,
				52,
				165,
				229,
				241,
				113,
				216,
				49,
				21,
				4,
				199,
				35,
				195,
				24,
				150,
				5,
				154,
				7,
				18,
				128,
				226,
				235,
				39,
				178,
				117,
				9,
				131,
				44,
				26,
				27,
				110,
				90,
				160,
				82,
				59,
				214,
				179,
				41,
				227,
				47,
				132,
				83,
				209,
				0,
				237,
				32,
				252,
				177,
				91,
				106,
				203,
				190,
				57,
				74,
				76,
				88,
				207,
				208,
				239,
				170,
				251,
				67,
				77,
				51,
				133,
				69,
				249,
				2,
				127,
				80,
				60,
				159,
				168,
				81,
				163,
				64,
				143,
				146,
				157,
				56,
				245,
				188,
				182,
				218,
				33,
				16,
				255,
				243,
				210,
				205,
				12,
				19,
				236,
				95,
				151,
				68,
				23,
				196,
				167,
				126,
				61,
				100,
				93,
				25,
				115,
				96,
				129,
				79,
				220,
				34,
				42,
				144,
				136,
				70,
				238,
				184,
				20,
				222,
				94,
				11,
				219,
				224,
				50,
				58,
				10,
				73,
				6,
				36,
				92,
				194,
				211,
				172,
				98,
				145,
				149,
				228,
				121,
				231,
				200,
				55,
				109,
				141,
				213,
				78,
				169,
				108,
				86,
				244,
				234,
				101,
				122,
				174,
				8,
				186,
				120,
				37,
				46,
				28,
				166,
				180,
				198,
				232,
				221,
				116,
				31,
				75,
				189,
				139,
				138,
				112,
				62,
				181,
				102,
				72,
				3,
				246,
				14,
				97,
				53,
				87,
				185,
				134,
				193,
				29,
				158,
				225,
				248,
				152,
				17,
				105,
				217,
				142,
				148,
				155,
				30,
				135,
				233,
				206,
				85,
				40,
				223,
				140,
				161,
				137,
				13,
				191,
				230,
				66,
				104,
				65,
				153,
				45,
				15,
				176,
				84,
				187,
				22
			};
			field_v = new byte[30]
			{
				1,
				2,
				4,
				8,
				16,
				32,
				64,
				128,
				27,
				54,
				108,
				216,
				171,
				77,
				154,
				47,
				94,
				188,
				99,
				198,
				151,
				53,
				106,
				212,
				179,
				125,
				250,
				239,
				197,
				145
			};
			field_w = new uint[256]
			{
				0u,
				235474187u,
				470948374u,
				303765277u,
				941896748u,
				908933415u,
				607530554u,
				708780849u,
				1883793496u,
				2118214995u,
				1817866830u,
				1649639237u,
				1215061108u,
				1181045119u,
				1417561698u,
				1517767529u,
				3767586992u,
				4003061179u,
				4236429990u,
				4069246893u,
				3635733660u,
				3602770327u,
				3299278474u,
				3400528769u,
				2430122216u,
				2664543715u,
				2362090238u,
				2193862645u,
				2835123396u,
				2801107407u,
				3035535058u,
				3135740889u,
				3678124923u,
				3576870512u,
				3341394285u,
				3374361702u,
				3810496343u,
				3977675356u,
				4279080257u,
				4043610186u,
				2876494627u,
				2776292904u,
				3076639029u,
				3110650942u,
				2472011535u,
				2640243204u,
				2403728665u,
				2169303058u,
				1001089995u,
				899835584u,
				666464733u,
				699432150u,
				59727847u,
				226906860u,
				530400753u,
				294930682u,
				1273168787u,
				1172967064u,
				1475418501u,
				1509430414u,
				1942435775u,
				2110667444u,
				1876241833u,
				1641816226u,
				2910219766u,
				2743034109u,
				2976151520u,
				3211623147u,
				2505202138u,
				2606453969u,
				2302690252u,
				2269728455u,
				3711829422u,
				3543599269u,
				3240894392u,
				3475313331u,
				3843699074u,
				3943906441u,
				4178062228u,
				4144047775u,
				1306967366u,
				1139781709u,
				1374988112u,
				1610459739u,
				1975683434u,
				2076935265u,
				1775276924u,
				1742315127u,
				1034867998u,
				866637845u,
				566021896u,
				800440835u,
				92987698u,
				193195065u,
				429456164u,
				395441711u,
				1984812685u,
				2017778566u,
				1784663195u,
				1683407248u,
				1315562145u,
				1080094634u,
				1383856311u,
				1551037884u,
				101039829u,
				135050206u,
				437757123u,
				337553864u,
				1042385657u,
				807962610u,
				573804783u,
				742039012u,
				2531067453u,
				2564033334u,
				2328828971u,
				2227573024u,
				2935566865u,
				2700099354u,
				3001755655u,
				3168937228u,
				3868552805u,
				3902563182u,
				4203181171u,
				4102977912u,
				3736164937u,
				3501741890u,
				3265478751u,
				3433712980u,
				1106041591u,
				1340463100u,
				1576976609u,
				1408749034u,
				2043211483u,
				2009195472u,
				1708848333u,
				1809054150u,
				832877231u,
				1068351396u,
				766945465u,
				599762354u,
				159417987u,
				126454664u,
				361929877u,
				463180190u,
				2709260871u,
				2943682380u,
				3178106961u,
				3009879386u,
				2572697195u,
				2538681184u,
				2236228733u,
				2336434550u,
				3509871135u,
				3745345300u,
				3441850377u,
				3274667266u,
				3910161971u,
				3877198648u,
				4110568485u,
				4211818798u,
				2597806476u,
				2497604743u,
				2261089178u,
				2295101073u,
				2733856160u,
				2902087851u,
				3202437046u,
				2968011453u,
				3936291284u,
				3835036895u,
				4136440770u,
				4169408201u,
				3535486456u,
				3702665459u,
				3467192302u,
				3231722213u,
				2051518780u,
				1951317047u,
				1716890410u,
				1750902305u,
				1113818384u,
				1282050075u,
				1584504582u,
				1350078989u,
				168810852u,
				67556463u,
				371049330u,
				404016761u,
				841739592u,
				1008918595u,
				775550814u,
				540080725u,
				3969562369u,
				3801332234u,
				4035489047u,
				4269907996u,
				3569255213u,
				3669462566u,
				3366754619u,
				3332740144u,
				2631065433u,
				2463879762u,
				2160117071u,
				2395588676u,
				2767645557u,
				2868897406u,
				3102011747u,
				3069049960u,
				202008497u,
				33778362u,
				270040487u,
				504459436u,
				875451293u,
				975658646u,
				675039627u,
				641025152u,
				2084704233u,
				1917518562u,
				1615861247u,
				1851332852u,
				1147550661u,
				1248802510u,
				1484005843u,
				1451044056u,
				933301370u,
				967311729u,
				733156972u,
				632953703u,
				260388950u,
				25965917u,
				328671808u,
				496906059u,
				1206477858u,
				1239443753u,
				1543208500u,
				1441952575u,
				2144161806u,
				1908694277u,
				1675577880u,
				1842759443u,
				3610369226u,
				3644379585u,
				3408119516u,
				3307916247u,
				4011190502u,
				3776767469u,
				4077384432u,
				4245618683u,
				2809771154u,
				2842737049u,
				3144396420u,
				3043140495u,
				2673705150u,
				2438237621u,
				2203032232u,
				2370213795u
			};
			field_x = new uint[256]
			{
				0u,
				185469197u,
				370938394u,
				487725847u,
				741876788u,
				657861945u,
				975451694u,
				824852259u,
				1483753576u,
				1400783205u,
				1315723890u,
				1164071807u,
				1950903388u,
				2135319889u,
				1649704518u,
				1767536459u,
				2967507152u,
				3152976349u,
				2801566410u,
				2918353863u,
				2631447780u,
				2547432937u,
				2328143614u,
				2177544179u,
				3901806776u,
				3818836405u,
				4270639778u,
				4118987695u,
				3299409036u,
				3483825537u,
				3535072918u,
				3652904859u,
				2077965243u,
				1893020342u,
				1841768865u,
				1724457132u,
				1474502543u,
				1559041666u,
				1107234197u,
				1257309336u,
				598438867u,
				681933534u,
				901210569u,
				1052338372u,
				261314535u,
				77422314u,
				428819965u,
				310463728u,
				3409685355u,
				3224740454u,
				3710368113u,
				3593056380u,
				3875770207u,
				3960309330u,
				4045380933u,
				4195456072u,
				2471224067u,
				2554718734u,
				2237133081u,
				2388260884u,
				3212035895u,
				3028143674u,
				2842678573u,
				2724322336u,
				4138563181u,
				4255350624u,
				3769721975u,
				3955191162u,
				3667219033u,
				3516619604u,
				3431546947u,
				3347532110u,
				2933734917u,
				2782082824u,
				3099667487u,
				3016697106u,
				2196052529u,
				2313884476u,
				2499348523u,
				2683765030u,
				1179510461u,
				1296297904u,
				1347548327u,
				1533017514u,
				1786102409u,
				1635502980u,
				2087309459u,
				2003294622u,
				507358933u,
				355706840u,
				136428751u,
				53458370u,
				839224033u,
				957055980u,
				605657339u,
				790073846u,
				2373340630u,
				2256028891u,
				2607439820u,
				2422494913u,
				2706270690u,
				2856345839u,
				3075636216u,
				3160175349u,
				3573941694u,
				3725069491u,
				3273267108u,
				3356761769u,
				4181598602u,
				4063242375u,
				4011996048u,
				3828103837u,
				1033297158u,
				915985419u,
				730517276u,
				545572369u,
				296679730u,
				446754879u,
				129166120u,
				213705253u,
				1709610350u,
				1860738147u,
				1945798516u,
				2029293177u,
				1239331162u,
				1120974935u,
				1606591296u,
				1422699085u,
				4148292826u,
				4233094615u,
				3781033664u,
				3931371469u,
				3682191598u,
				3497509347u,
				3446004468u,
				3328955385u,
				2939266226u,
				2755636671u,
				3106780840u,
				2988687269u,
				2198438022u,
				2282195339u,
				2501218972u,
				2652609425u,
				1201765386u,
				1286567175u,
				1371368976u,
				1521706781u,
				1805211710u,
				1620529459u,
				2105887268u,
				1988838185u,
				533804130u,
				350174575u,
				164439672u,
				46346101u,
				870912086u,
				954669403u,
				636813900u,
				788204353u,
				2358957921u,
				2274680428u,
				2592523643u,
				2441661558u,
				2695033685u,
				2880240216u,
				3065962831u,
				3182487618u,
				3572145929u,
				3756299780u,
				3270937875u,
				3388507166u,
				4174560061u,
				4091327024u,
				4006521127u,
				3854606378u,
				1014646705u,
				930369212u,
				711349675u,
				560487590u,
				272786309u,
				457992840u,
				106852767u,
				223377554u,
				1678381017u,
				1862534868u,
				1914052035u,
				2031621326u,
				1211247597u,
				1128014560u,
				1580087799u,
				1428173050u,
				32283319u,
				182621114u,
				401639597u,
				486441376u,
				768917123u,
				651868046u,
				1003007129u,
				818324884u,
				1503449823u,
				1385356242u,
				1333838021u,
				1150208456u,
				1973745387u,
				2125135846u,
				1673061617u,
				1756818940u,
				2970356327u,
				3120694122u,
				2802849917u,
				2887651696u,
				2637442643u,
				2520393566u,
				2334669897u,
				2149987652u,
				3917234703u,
				3799141122u,
				4284502037u,
				4100872472u,
				3309594171u,
				3460984630u,
				3545789473u,
				3629546796u,
				2050466060u,
				1899603969u,
				1814803222u,
				1730525723u,
				1443857720u,
				1560382517u,
				1075025698u,
				1260232239u,
				575138148u,
				692707433u,
				878443390u,
				1062597235u,
				243256656u,
				91341917u,
				409198410u,
				325965383u,
				3403100636u,
				3252238545u,
				3704300486u,
				3620022987u,
				3874428392u,
				3990953189u,
				4042459122u,
				4227665663u,
				2460449204u,
				2578018489u,
				2226875310u,
				2411029155u,
				3198115200u,
				3046200461u,
				2827177882u,
				2743944855u
			};
			field_y = new uint[256]
			{
				0u,
				218828297u,
				437656594u,
				387781147u,
				875313188u,
				958871085u,
				775562294u,
				590424639u,
				1750626376u,
				1699970625u,
				1917742170u,
				2135253587u,
				1551124588u,
				1367295589u,
				1180849278u,
				1265195639u,
				3501252752u,
				3720081049u,
				3399941250u,
				3350065803u,
				3835484340u,
				3919042237u,
				4270507174u,
				4085369519u,
				3102249176u,
				3051593425u,
				2734591178u,
				2952102595u,
				2361698556u,
				2177869557u,
				2530391278u,
				2614737639u,
				3145456443u,
				3060847922u,
				2708326185u,
				2892417312u,
				2404901663u,
				2187128086u,
				2504130317u,
				2555048196u,
				3542330227u,
				3727205754u,
				3375740769u,
				3292445032u,
				3876557655u,
				3926170974u,
				4246310725u,
				4027744588u,
				1808481195u,
				1723872674u,
				1910319033u,
				2094410160u,
				1608975247u,
				1391201670u,
				1173430173u,
				1224348052u,
				59984867u,
				244860394u,
				428169201u,
				344873464u,
				935293895u,
				984907214u,
				766078933u,
				547512796u,
				1844882806u,
				1627235199u,
				2011214180u,
				2062270317u,
				1507497298u,
				1423022939u,
				1137477952u,
				1321699145u,
				95345982u,
				145085239u,
				532201772u,
				313773861u,
				830661914u,
				1015671571u,
				731183368u,
				648017665u,
				3175501286u,
				2957853679u,
				2807058932u,
				2858115069u,
				2305455554u,
				2220981195u,
				2474404304u,
				2658625497u,
				3575528878u,
				3625268135u,
				3473416636u,
				3254988725u,
				3778151818u,
				3963161475u,
				4213447064u,
				4130281361u,
				3599595085u,
				3683022916u,
				3432737375u,
				3247465558u,
				3802222185u,
				4020912224u,
				4172763771u,
				4122762354u,
				3201631749u,
				3017672716u,
				2764249623u,
				2848461854u,
				2331590177u,
				2280796200u,
				2431590963u,
				2648976442u,
				104699613u,
				188127444u,
				472615631u,
				287343814u,
				840019705u,
				1058709744u,
				671593195u,
				621591778u,
				1852171925u,
				1668212892u,
				1953757831u,
				2037970062u,
				1514790577u,
				1463996600u,
				1080017571u,
				1297403050u,
				3673637356u,
				3623636965u,
				3235995134u,
				3454686199u,
				4007360968u,
				3822090177u,
				4107101658u,
				4190530515u,
				2997825956u,
				3215212461u,
				2830708150u,
				2779915199u,
				2256734592u,
				2340947849u,
				2627016082u,
				2443058075u,
				172466556u,
				122466165u,
				273792366u,
				492483431u,
				1047239000u,
				861968209u,
				612205898u,
				695634755u,
				1646252340u,
				1863638845u,
				2013908262u,
				1963115311u,
				1446242576u,
				1530455833u,
				1277555970u,
				1093597963u,
				1636604631u,
				1820824798u,
				2073724613u,
				1989249228u,
				1436590835u,
				1487645946u,
				1337376481u,
				1119727848u,
				164948639u,
				81781910u,
				331544205u,
				516552836u,
				1039717051u,
				821288114u,
				669961897u,
				719700128u,
				2973530695u,
				3157750862u,
				2871682645u,
				2787207260u,
				2232435299u,
				2283490410u,
				2667994737u,
				2450346104u,
				3647212047u,
				3564045318u,
				3279033885u,
				3464042516u,
				3980931627u,
				3762502690u,
				4150144569u,
				4199882800u,
				3070356634u,
				3121275539u,
				2904027272u,
				2686254721u,
				2200818878u,
				2384911031u,
				2570832044u,
				2486224549u,
				3747192018u,
				3528626907u,
				3310321856u,
				3359936201u,
				3950355702u,
				3867060991u,
				4049844452u,
				4234721005u,
				1739656202u,
				1790575107u,
				2108100632u,
				1890328081u,
				1402811438u,
				1586903591u,
				1233856572u,
				1149249077u,
				266959938u,
				48394827u,
				369057872u,
				418672217u,
				1002783846u,
				919489135u,
				567498868u,
				752375421u,
				209336225u,
				24197544u,
				376187827u,
				459744698u,
				945164165u,
				895287692u,
				574624663u,
				793451934u,
				1679968233u,
				1764313568u,
				2117360635u,
				1933530610u,
				1343127501u,
				1560637892u,
				1243112415u,
				1192455638u,
				3704280881u,
				3519142200u,
				3336358691u,
				3419915562u,
				3907448597u,
				3857572124u,
				4075877127u,
				4294704398u,
				3029510009u,
				3113855344u,
				2927934315u,
				2744104290u,
				2159976285u,
				2377486676u,
				2594734927u,
				2544078150u
			};
			field_z = new uint[256]
			{
				0u,
				151849742u,
				303699484u,
				454499602u,
				607398968u,
				758720310u,
				908999204u,
				1059270954u,
				1214797936u,
				1097159550u,
				1517440620u,
				1400849762u,
				1817998408u,
				1699839814u,
				2118541908u,
				2001430874u,
				2429595872u,
				2581445614u,
				2194319100u,
				2345119218u,
				3034881240u,
				3186202582u,
				2801699524u,
				2951971274u,
				3635996816u,
				3518358430u,
				3399679628u,
				3283088770u,
				4237083816u,
				4118925222u,
				4002861748u,
				3885750714u,
				1002142683u,
				850817237u,
				698445255u,
				548169417u,
				529487843u,
				377642221u,
				227885567u,
				77089521u,
				1943217067u,
				2061379749u,
				1640576439u,
				1757691577u,
				1474760595u,
				1592394909u,
				1174215055u,
				1290801793u,
				2875968315u,
				2724642869u,
				3111247143u,
				2960971305u,
				2405426947u,
				2253581325u,
				2638606623u,
				2487810577u,
				3808662347u,
				3926825029u,
				4044981591u,
				4162096729u,
				3342319475u,
				3459953789u,
				3576539503u,
				3693126241u,
				1986918061u,
				2137062819u,
				1685577905u,
				1836772287u,
				1381620373u,
				1532285339u,
				1078185097u,
				1229899655u,
				1040559837u,
				923313619u,
				740276417u,
				621982671u,
				439452389u,
				322734571u,
				137073913u,
				19308535u,
				3871163981u,
				4021308739u,
				4104605777u,
				4255800159u,
				3263785589u,
				3414450555u,
				3499326569u,
				3651041127u,
				2933202493u,
				2815956275u,
				3167684641u,
				3049390895u,
				2330014213u,
				2213296395u,
				2566595609u,
				2448830231u,
				1305906550u,
				1155237496u,
				1607244650u,
				1455525988u,
				1776460110u,
				1626319424u,
				2079897426u,
				1928707164u,
				96392454u,
				213114376u,
				396673818u,
				514443284u,
				562755902u,
				679998000u,
				865136418u,
				983426092u,
				3708173718u,
				3557504664u,
				3474729866u,
				3323011204u,
				4180808110u,
				4030667424u,
				3945269170u,
				3794078908u,
				2507040230u,
				2623762152u,
				2272556026u,
				2390325492u,
				2975484382u,
				3092726480u,
				2738905026u,
				2857194700u,
				3973773121u,
				3856137295u,
				4274053469u,
				4157467219u,
				3371096953u,
				3252932727u,
				3673476453u,
				3556361835u,
				2763173681u,
				2915017791u,
				3064510765u,
				3215307299u,
				2156299017u,
				2307622919u,
				2459735317u,
				2610011675u,
				2081048481u,
				1963412655u,
				1846563261u,
				1729977011u,
				1480485785u,
				1362321559u,
				1243905413u,
				1126790795u,
				878845905u,
				1030690015u,
				645401037u,
				796197571u,
				274084841u,
				425408743u,
				38544885u,
				188821243u,
				3613494426u,
				3731654548u,
				3313212038u,
				3430322568u,
				4082475170u,
				4200115116u,
				3780097726u,
				3896688048u,
				2668221674u,
				2516901860u,
				2366882550u,
				2216610296u,
				3141400786u,
				2989552604u,
				2837966542u,
				2687165888u,
				1202797690u,
				1320957812u,
				1437280870u,
				1554391400u,
				1669664834u,
				1787304780u,
				1906247262u,
				2022837584u,
				265905162u,
				114585348u,
				499347990u,
				349075736u,
				736970802u,
				585122620u,
				972512814u,
				821712160u,
				2595684844u,
				2478443234u,
				2293045232u,
				2174754046u,
				3196267988u,
				3079546586u,
				2895723464u,
				2777952454u,
				3537852828u,
				3687994002u,
				3234156416u,
				3385345166u,
				4142626212u,
				4293295786u,
				3841024952u,
				3992742070u,
				174567692u,
				57326082u,
				410887952u,
				292596766u,
				777231668u,
				660510266u,
				1011452712u,
				893681702u,
				1108339068u,
				1258480242u,
				1343618912u,
				1494807662u,
				1715193156u,
				1865862730u,
				1948373848u,
				2100090966u,
				2701949495u,
				2818666809u,
				3004591147u,
				3122358053u,
				2235061775u,
				2352307457u,
				2535604243u,
				2653899549u,
				3915653703u,
				3764988233u,
				4219352155u,
				4067639125u,
				3444575871u,
				3294430577u,
				3746175075u,
				3594982253u,
				836553431u,
				953270745u,
				600235211u,
				718002117u,
				367585007u,
				484830689u,
				133361907u,
				251657213u,
				2041877159u,
				1891211689u,
				1806599355u,
				1654886325u,
				1568718495u,
				1418573201u,
				1335535747u,
				1184342925u
			};
			i();
			h();
			g();
			f();
			e();
			d();
			c();
			b();
			a();
		}

		private static void i()
		{
			aa = new uint[256]
			{
				3328402341u,
				4168907908u,
				4000806809u,
				4135287693u,
				4294111757u,
				3597364157u,
				3731845041u,
				2445657428u,
				1613770832u,
				33620227u,
				3462883241u,
				1445669757u,
				3892248089u,
				3050821474u,
				1303096294u,
				3967186586u,
				2412431941u,
				528646813u,
				2311702848u,
				4202528135u,
				4026202645u,
				2992200171u,
				2387036105u,
				4226871307u,
				1101901292u,
				3017069671u,
				1604494077u,
				1169141738u,
				597466303u,
				1403299063u,
				3832705686u,
				2613100635u,
				1974974402u,
				3791519004u,
				1033081774u,
				1277568618u,
				1815492186u,
				2118074177u,
				4126668546u,
				2211236943u,
				1748251740u,
				1369810420u,
				3521504564u,
				4193382664u,
				3799085459u,
				2883115123u,
				1647391059u,
				706024767u,
				134480908u,
				2512897874u,
				1176707941u,
				2646852446u,
				806885416u,
				932615841u,
				168101135u,
				798661301u,
				235341577u,
				605164086u,
				461406363u,
				3756188221u,
				3454790438u,
				1311188841u,
				2142417613u,
				3933566367u,
				302582043u,
				495158174u,
				1479289972u,
				874125870u,
				907746093u,
				3698224818u,
				3025820398u,
				1537253627u,
				2756858614u,
				1983593293u,
				3084310113u,
				2108928974u,
				1378429307u,
				3722699582u,
				1580150641u,
				327451799u,
				2790478837u,
				3117535592u,
				0u,
				3253595436u,
				1075847264u,
				3825007647u,
				2041688520u,
				3059440621u,
				3563743934u,
				2378943302u,
				1740553945u,
				1916352843u,
				2487896798u,
				2555137236u,
				2958579944u,
				2244988746u,
				3151024235u,
				3320835882u,
				1336584933u,
				3992714006u,
				2252555205u,
				2588757463u,
				1714631509u,
				293963156u,
				2319795663u,
				3925473552u,
				67240454u,
				4269768577u,
				2689618160u,
				2017213508u,
				631218106u,
				1269344483u,
				2723238387u,
				1571005438u,
				2151694528u,
				93294474u,
				1066570413u,
				563977660u,
				1882732616u,
				4059428100u,
				1673313503u,
				2008463041u,
				2950355573u,
				1109467491u,
				537923632u,
				3858759450u,
				4260623118u,
				3218264685u,
				2177748300u,
				403442708u,
				638784309u,
				3287084079u,
				3193921505u,
				899127202u,
				2286175436u,
				773265209u,
				2479146071u,
				1437050866u,
				4236148354u,
				2050833735u,
				3362022572u,
				3126681063u,
				840505643u,
				3866325909u,
				3227541664u,
				427917720u,
				2655997905u,
				2749160575u,
				1143087718u,
				1412049534u,
				999329963u,
				193497219u,
				2353415882u,
				3354324521u,
				1807268051u,
				672404540u,
				2816401017u,
				3160301282u,
				369822493u,
				2916866934u,
				3688947771u,
				1681011286u,
				1949973070u,
				336202270u,
				2454276571u,
				201721354u,
				1210328172u,
				3093060836u,
				2680341085u,
				3184776046u,
				1135389935u,
				3294782118u,
				965841320u,
				831886756u,
				3554993207u,
				4068047243u,
				3588745010u,
				2345191491u,
				1849112409u,
				3664604599u,
				26054028u,
				2983581028u,
				2622377682u,
				1235855840u,
				3630984372u,
				2891339514u,
				4092916743u,
				3488279077u,
				3395642799u,
				4101667470u,
				1202630377u,
				268961816u,
				1874508501u,
				4034427016u,
				1243948399u,
				1546530418u,
				941366308u,
				1470539505u,
				1941222599u,
				2546386513u,
				3421038627u,
				2715671932u,
				3899946140u,
				1042226977u,
				2521517021u,
				1639824860u,
				227249030u,
				260737669u,
				3765465232u,
				2084453954u,
				1907733956u,
				3429263018u,
				2420656344u,
				100860677u,
				4160157185u,
				470683154u,
				3261161891u,
				1781871967u,
				2924959737u,
				1773779408u,
				394692241u,
				2579611992u,
				974986535u,
				664706745u,
				3655459128u,
				3958962195u,
				731420851u,
				571543859u,
				3530123707u,
				2849626480u,
				126783113u,
				865375399u,
				765172662u,
				1008606754u,
				361203602u,
				3387549984u,
				2278477385u,
				2857719295u,
				1344809080u,
				2782912378u,
				59542671u,
				1503764984u,
				160008576u,
				437062935u,
				1707065306u,
				3622233649u,
				2218934982u,
				3496503480u,
				2185314755u,
				697932208u,
				1512910199u,
				504303377u,
				2075177163u,
				2824099068u,
				1841019862u,
				739644986u
			};
		}

		private static void h()
		{
			ab = new uint[256]
			{
				2781242211u,
				2230877308u,
				2582542199u,
				2381740923u,
				234877682u,
				3184946027u,
				2984144751u,
				1418839493u,
				1348481072u,
				50462977u,
				2848876391u,
				2102799147u,
				434634494u,
				1656084439u,
				3863849899u,
				2599188086u,
				1167051466u,
				2636087938u,
				1082771913u,
				2281340285u,
				368048890u,
				3954334041u,
				3381544775u,
				201060592u,
				3963727277u,
				1739838676u,
				4250903202u,
				3930435503u,
				3206782108u,
				4149453988u,
				2531553906u,
				1536934080u,
				3262494647u,
				484572669u,
				2923271059u,
				1783375398u,
				1517041206u,
				1098792767u,
				49674231u,
				1334037708u,
				1550332980u,
				4098991525u,
				886171109u,
				150598129u,
				2481090929u,
				1940642008u,
				1398944049u,
				1059722517u,
				201851908u,
				1385547719u,
				1699095331u,
				1587397571u,
				674240536u,
				2704774806u,
				252314885u,
				3039795866u,
				151914247u,
				908333586u,
				2602270848u,
				1038082786u,
				651029483u,
				1766729511u,
				3447698098u,
				2682942837u,
				454166793u,
				2652734339u,
				1951935532u,
				775166490u,
				758520603u,
				3000790638u,
				4004797018u,
				4217086112u,
				4137964114u,
				1299594043u,
				1639438038u,
				3464344499u,
				2068982057u,
				1054729187u,
				1901997871u,
				2534638724u,
				4121318227u,
				1757008337u,
				0u,
				750906861u,
				1614815264u,
				535035132u,
				3363418545u,
				3988151131u,
				3201591914u,
				1183697867u,
				3647454910u,
				1265776953u,
				3734260298u,
				3566750796u,
				3903871064u,
				1250283471u,
				1807470800u,
				717615087u,
				3847203498u,
				384695291u,
				3313910595u,
				3617213773u,
				1432761139u,
				2484176261u,
				3481945413u,
				283769337u,
				100925954u,
				2180939647u,
				4037038160u,
				1148730428u,
				3123027871u,
				3813386408u,
				4087501137u,
				4267549603u,
				3229630528u,
				2315620239u,
				2906624658u,
				3156319645u,
				1215313976u,
				82966005u,
				3747855548u,
				3245848246u,
				1974459098u,
				1665278241u,
				807407632u,
				451280895u,
				251524083u,
				1841287890u,
				1283575245u,
				337120268u,
				891687699u,
				801369324u,
				3787349855u,
				2721421207u,
				3431482436u,
				959321879u,
				1469301956u,
				4065699751u,
				2197585534u,
				1199193405u,
				2898814052u,
				3887750493u,
				724703513u,
				2514908019u,
				2696962144u,
				2551808385u,
				3516813135u,
				2141445340u,
				1715741218u,
				2119445034u,
				2872807568u,
				2198571144u,
				3398190662u,
				700968686u,
				3547052216u,
				1009259540u,
				2041044702u,
				3803995742u,
				487983883u,
				1991105499u,
				1004265696u,
				1449407026u,
				1316239930u,
				504629770u,
				3683797321u,
				168560134u,
				1816667172u,
				3837287516u,
				1570751170u,
				1857934291u,
				4014189740u,
				2797888098u,
				2822345105u,
				2754712981u,
				936633572u,
				2347923833u,
				852879335u,
				1133234376u,
				1500395319u,
				3084545389u,
				2348912013u,
				1689376213u,
				3533459022u,
				3762923945u,
				3034082412u,
				4205598294u,
				133428468u,
				634383082u,
				2949277029u,
				2398386810u,
				3913789102u,
				403703816u,
				3580869306u,
				2297460856u,
				1867130149u,
				1918643758u,
				607656988u,
				4049053350u,
				3346248884u,
				1368901318u,
				600565992u,
				2090982877u,
				2632479860u,
				557719327u,
				3717614411u,
				3697393085u,
				2249034635u,
				2232388234u,
				2430627952u,
				1115438654u,
				3295786421u,
				2865522278u,
				3633334344u,
				84280067u,
				33027830u,
				303828494u,
				2747425121u,
				1600795957u,
				4188952407u,
				3496589753u,
				2434238086u,
				1486471617u,
				658119965u,
				3106381470u,
				953803233u,
				334231800u,
				3005978776u,
				857870609u,
				3151128937u,
				1890179545u,
				2298973838u,
				2805175444u,
				3056442267u,
				574365214u,
				2450884487u,
				550103529u,
				1233637070u,
				4289353045u,
				2018519080u,
				2057691103u,
				2399374476u,
				4166623649u,
				2148108681u,
				387583245u,
				3664101311u,
				836232934u,
				3330556482u,
				3100665960u,
				3280093505u,
				2955516313u,
				2002398509u,
				287182607u,
				3413881008u,
				4238890068u,
				3597515707u,
				975967766u
			};
		}

		private static void g()
		{
			ac = new uint[256]
			{
				1671808611u,
				2089089148u,
				2006576759u,
				2072901243u,
				4061003762u,
				1807603307u,
				1873927791u,
				3310653893u,
				810573872u,
				16974337u,
				1739181671u,
				729634347u,
				4263110654u,
				3613570519u,
				2883997099u,
				1989864566u,
				3393556426u,
				2191335298u,
				3376449993u,
				2106063485u,
				4195741690u,
				1508618841u,
				1204391495u,
				4027317232u,
				2917941677u,
				3563566036u,
				2734514082u,
				2951366063u,
				2629772188u,
				2767672228u,
				1922491506u,
				3227229120u,
				3082974647u,
				4246528509u,
				2477669779u,
				644500518u,
				911895606u,
				1061256767u,
				4144166391u,
				3427763148u,
				878471220u,
				2784252325u,
				3845444069u,
				4043897329u,
				1905517169u,
				3631459288u,
				827548209u,
				356461077u,
				67897348u,
				3344078279u,
				593839651u,
				3277757891u,
				405286936u,
				2527147926u,
				84871685u,
				2595565466u,
				118033927u,
				305538066u,
				2157648768u,
				3795705826u,
				3945188843u,
				661212711u,
				2999812018u,
				1973414517u,
				152769033u,
				2208177539u,
				745822252u,
				439235610u,
				455947803u,
				1857215598u,
				1525593178u,
				2700827552u,
				1391895634u,
				994932283u,
				3596728278u,
				3016654259u,
				695947817u,
				3812548067u,
				795958831u,
				2224493444u,
				1408607827u,
				3513301457u,
				0u,
				3979133421u,
				543178784u,
				4229948412u,
				2982705585u,
				1542305371u,
				1790891114u,
				3410398667u,
				3201918910u,
				961245753u,
				1256100938u,
				1289001036u,
				1491644504u,
				3477767631u,
				3496721360u,
				4012557807u,
				2867154858u,
				4212583931u,
				1137018435u,
				1305975373u,
				861234739u,
				2241073541u,
				1171229253u,
				4178635257u,
				33948674u,
				2139225727u,
				1357946960u,
				1011120188u,
				2679776671u,
				2833468328u,
				1374921297u,
				2751356323u,
				1086357568u,
				2408187279u,
				2460827538u,
				2646352285u,
				944271416u,
				4110742005u,
				3168756668u,
				3066132406u,
				3665145818u,
				560153121u,
				271589392u,
				4279952895u,
				4077846003u,
				3530407890u,
				3444343245u,
				202643468u,
				322250259u,
				3962553324u,
				1608629855u,
				2543990167u,
				1154254916u,
				389623319u,
				3294073796u,
				2817676711u,
				2122513534u,
				1028094525u,
				1689045092u,
				1575467613u,
				422261273u,
				1939203699u,
				1621147744u,
				2174228865u,
				1339137615u,
				3699352540u,
				577127458u,
				712922154u,
				2427141008u,
				2290289544u,
				1187679302u,
				3995715566u,
				3100863416u,
				339486740u,
				3732514782u,
				1591917662u,
				186455563u,
				3681988059u,
				3762019296u,
				844522546u,
				978220090u,
				169743370u,
				1239126601u,
				101321734u,
				611076132u,
				1558493276u,
				3260915650u,
				3547250131u,
				2901361580u,
				1655096418u,
				2443721105u,
				2510565781u,
				3828863972u,
				2039214713u,
				3878868455u,
				3359869896u,
				928607799u,
				1840765549u,
				2374762893u,
				3580146133u,
				1322425422u,
				2850048425u,
				1823791212u,
				1459268694u,
				4094161908u,
				3928346602u,
				1706019429u,
				2056189050u,
				2934523822u,
				135794696u,
				3134549946u,
				2022240376u,
				628050469u,
				779246638u,
				472135708u,
				2800834470u,
				3032970164u,
				3327236038u,
				3894660072u,
				3715932637u,
				1956440180u,
				522272287u,
				1272813131u,
				3185336765u,
				2340818315u,
				2323976074u,
				1888542832u,
				1044544574u,
				3049550261u,
				1722469478u,
				1222152264u,
				50660867u,
				4127324150u,
				236067854u,
				1638122081u,
				895445557u,
				1475980887u,
				3117443513u,
				2257655686u,
				3243809217u,
				489110045u,
				2662934430u,
				3778599393u,
				4162055160u,
				2561878936u,
				288563729u,
				1773916777u,
				3648039385u,
				2391345038u,
				2493985684u,
				2612407707u,
				505560094u,
				2274497927u,
				3911240169u,
				3460925390u,
				1442818645u,
				678973480u,
				3749357023u,
				2358182796u,
				2717407649u,
				2306869641u,
				219617805u,
				3218761151u,
				3862026214u,
				1120306242u,
				1756942440u,
				1103331905u,
				2578459033u,
				762796589u,
				252780047u,
				2966125488u,
				1425844308u,
				3151392187u,
				372911126u
			};
		}

		private static void f()
		{
			ad = new uint[256]
			{
				1667474886u,
				2088535288u,
				2004326894u,
				2071694838u,
				4075949567u,
				1802223062u,
				1869591006u,
				3318043793u,
				808472672u,
				16843522u,
				1734846926u,
				724270422u,
				4278065639u,
				3621216949u,
				2880169549u,
				1987484396u,
				3402253711u,
				2189597983u,
				3385409673u,
				2105378810u,
				4210693615u,
				1499065266u,
				1195886990u,
				4042263547u,
				2913856577u,
				3570689971u,
				2728590687u,
				2947541573u,
				2627518243u,
				2762274643u,
				1920112356u,
				3233831835u,
				3082273397u,
				4261223649u,
				2475929149u,
				640051788u,
				909531756u,
				1061110142u,
				4160160501u,
				3435941763u,
				875846760u,
				2779116625u,
				3857003729u,
				4059105529u,
				1903268834u,
				3638064043u,
				825316194u,
				353713962u,
				67374088u,
				3351728789u,
				589522246u,
				3284360861u,
				404236336u,
				2526454071u,
				84217610u,
				2593830191u,
				117901582u,
				303183396u,
				2155911963u,
				3806477791u,
				3958056653u,
				656894286u,
				2998062463u,
				1970642922u,
				151591698u,
				2206440989u,
				741110872u,
				437923380u,
				454765878u,
				1852748508u,
				1515908788u,
				2694904667u,
				1381168804u,
				993742198u,
				3604373943u,
				3014905469u,
				690584402u,
				3823320797u,
				791638366u,
				2223281939u,
				1398011302u,
				3520161977u,
				0u,
				3991743681u,
				538992704u,
				4244381667u,
				2981218425u,
				1532751286u,
				1785380564u,
				3419096717u,
				3200178535u,
				960056178u,
				1246420628u,
				1280103576u,
				1482221744u,
				3486468741u,
				3503319995u,
				4025428677u,
				2863326543u,
				4227536621u,
				1128514950u,
				1296947098u,
				859002214u,
				2240123921u,
				1162203018u,
				4193849577u,
				33687044u,
				2139062782u,
				1347481760u,
				1010582648u,
				2678045221u,
				2829640523u,
				1364325282u,
				2745433693u,
				1077985408u,
				2408548869u,
				2459086143u,
				2644360225u,
				943212656u,
				4126475505u,
				3166494563u,
				3065430391u,
				3671750063u,
				555836226u,
				269496352u,
				4294908645u,
				4092792573u,
				3537006015u,
				3452783745u,
				202118168u,
				320025894u,
				3974901699u,
				1600119230u,
				2543297077u,
				1145359496u,
				387397934u,
				3301201811u,
				2812801621u,
				2122220284u,
				1027426170u,
				1684319432u,
				1566435258u,
				421079858u,
				1936954854u,
				1616945344u,
				2172753945u,
				1330631070u,
				3705438115u,
				572679748u,
				707427924u,
				2425400123u,
				2290647819u,
				1179044492u,
				4008585671u,
				3099120491u,
				336870440u,
				3739122087u,
				1583276732u,
				185277718u,
				3688593069u,
				3772791771u,
				842159716u,
				976899700u,
				168435220u,
				1229577106u,
				101059084u,
				606366792u,
				1549591736u,
				3267517855u,
				3553849021u,
				2897014595u,
				1650632388u,
				2442242105u,
				2509612081u,
				3840161747u,
				2038008818u,
				3890688725u,
				3368567691u,
				926374254u,
				1835907034u,
				2374863873u,
				3587531953u,
				1313788572u,
				2846482505u,
				1819063512u,
				1448540844u,
				4109633523u,
				3941213647u,
				1701162954u,
				2054852340u,
				2930698567u,
				134748176u,
				3132806511u,
				2021165296u,
				623210314u,
				774795868u,
				471606328u,
				2795958615u,
				3031746419u,
				3334885783u,
				3907527627u,
				3722280097u,
				1953799400u,
				522133822u,
				1263263126u,
				3183336545u,
				2341176845u,
				2324333839u,
				1886425312u,
				1044267644u,
				3048588401u,
				1718004428u,
				1212733584u,
				50529542u,
				4143317495u,
				235803164u,
				1633788866u,
				892690282u,
				1465383342u,
				3115962473u,
				2256965911u,
				3250673817u,
				488449850u,
				2661202215u,
				3789633753u,
				4177007595u,
				2560144171u,
				286339874u,
				1768537042u,
				3654906025u,
				2391705863u,
				2492770099u,
				2610673197u,
				505291324u,
				2273808917u,
				3924369609u,
				3469625735u,
				1431699370u,
				673740880u,
				3755965093u,
				2358021891u,
				2711746649u,
				2307489801u,
				218961690u,
				3217021541u,
				3873845719u,
				1111672452u,
				1751693520u,
				1094828930u,
				2576986153u,
				757954394u,
				252645662u,
				2964376443u,
				1414855848u,
				3149649517u,
				370555436u
			};
		}

		private static void e()
		{
			ae = new uint[256]
			{
				1374988112u,
				2118214995u,
				437757123u,
				975658646u,
				1001089995u,
				530400753u,
				2902087851u,
				1273168787u,
				540080725u,
				2910219766u,
				2295101073u,
				4110568485u,
				1340463100u,
				3307916247u,
				641025152u,
				3043140495u,
				3736164937u,
				632953703u,
				1172967064u,
				1576976609u,
				3274667266u,
				2169303058u,
				2370213795u,
				1809054150u,
				59727847u,
				361929877u,
				3211623147u,
				2505202138u,
				3569255213u,
				1484005843u,
				1239443753u,
				2395588676u,
				1975683434u,
				4102977912u,
				2572697195u,
				666464733u,
				3202437046u,
				4035489047u,
				3374361702u,
				2110667444u,
				1675577880u,
				3843699074u,
				2538681184u,
				1649639237u,
				2976151520u,
				3144396420u,
				4269907996u,
				4178062228u,
				1883793496u,
				2403728665u,
				2497604743u,
				1383856311u,
				2876494627u,
				1917518562u,
				3810496343u,
				1716890410u,
				3001755655u,
				800440835u,
				2261089178u,
				3543599269u,
				807962610u,
				599762354u,
				33778362u,
				3977675356u,
				2328828971u,
				2809771154u,
				4077384432u,
				1315562145u,
				1708848333u,
				101039829u,
				3509871135u,
				3299278474u,
				875451293u,
				2733856160u,
				92987698u,
				2767645557u,
				193195065u,
				1080094634u,
				1584504582u,
				3178106961u,
				1042385657u,
				2531067453u,
				3711829422u,
				1306967366u,
				2438237621u,
				1908694277u,
				67556463u,
				1615861247u,
				429456164u,
				3602770327u,
				2302690252u,
				1742315127u,
				2968011453u,
				126454664u,
				3877198648u,
				2043211483u,
				2709260871u,
				2084704233u,
				4169408201u,
				0u,
				159417987u,
				841739592u,
				504459436u,
				1817866830u,
				4245618683u,
				260388950u,
				1034867998u,
				908933415u,
				168810852u,
				1750902305u,
				2606453969u,
				607530554u,
				202008497u,
				2472011535u,
				3035535058u,
				463180190u,
				2160117071u,
				1641816226u,
				1517767529u,
				470948374u,
				3801332234u,
				3231722213u,
				1008918595u,
				303765277u,
				235474187u,
				4069246893u,
				766945465u,
				337553864u,
				1475418501u,
				2943682380u,
				4003061179u,
				2743034109u,
				4144047775u,
				1551037884u,
				1147550661u,
				1543208500u,
				2336434550u,
				3408119516u,
				3069049960u,
				3102011747u,
				3610369226u,
				1113818384u,
				328671808u,
				2227573024u,
				2236228733u,
				3535486456u,
				2935566865u,
				3341394285u,
				496906059u,
				3702665459u,
				226906860u,
				2009195472u,
				733156972u,
				2842737049u,
				294930682u,
				1206477858u,
				2835123396u,
				2700099354u,
				1451044056u,
				573804783u,
				2269728455u,
				3644379585u,
				2362090238u,
				2564033334u,
				2801107407u,
				2776292904u,
				3669462566u,
				1068351396u,
				742039012u,
				1350078989u,
				1784663195u,
				1417561698u,
				4136440770u,
				2430122216u,
				775550814u,
				2193862645u,
				2673705150u,
				1775276924u,
				1876241833u,
				3475313331u,
				3366754619u,
				270040487u,
				3902563182u,
				3678124923u,
				3441850377u,
				1851332852u,
				3969562369u,
				2203032232u,
				3868552805u,
				2868897406u,
				566021896u,
				4011190502u,
				3135740889u,
				1248802510u,
				3936291284u,
				699432150u,
				832877231u,
				708780849u,
				3332740144u,
				899835584u,
				1951317047u,
				4236429990u,
				3767586992u,
				866637845u,
				4043610186u,
				1106041591u,
				2144161806u,
				395441711u,
				1984812685u,
				1139781709u,
				3433712980u,
				3835036895u,
				2664543715u,
				1282050075u,
				3240894392u,
				1181045119u,
				2640243204u,
				25965917u,
				4203181171u,
				4211818798u,
				3009879386u,
				2463879762u,
				3910161971u,
				1842759443u,
				2597806476u,
				933301370u,
				1509430414u,
				3943906441u,
				3467192302u,
				3076639029u,
				3776767469u,
				2051518780u,
				2631065433u,
				1441952575u,
				404016761u,
				1942435775u,
				1408749034u,
				1610459739u,
				3745345300u,
				2017778566u,
				3400528769u,
				3110650942u,
				941896748u,
				3265478751u,
				371049330u,
				3168937228u,
				675039627u,
				4279080257u,
				967311729u,
				135050206u,
				3635733660u,
				1683407248u,
				2076935265u,
				3576870512u,
				1215061108u,
				3501741890u
			};
		}

		private static void d()
		{
			af = new uint[256]
			{
				1347548327u,
				1400783205u,
				3273267108u,
				2520393566u,
				3409685355u,
				4045380933u,
				2880240216u,
				2471224067u,
				1428173050u,
				4138563181u,
				2441661558u,
				636813900u,
				4233094615u,
				3620022987u,
				2149987652u,
				2411029155u,
				1239331162u,
				1730525723u,
				2554718734u,
				3781033664u,
				46346101u,
				310463728u,
				2743944855u,
				3328955385u,
				3875770207u,
				2501218972u,
				3955191162u,
				3667219033u,
				768917123u,
				3545789473u,
				692707433u,
				1150208456u,
				1786102409u,
				2029293177u,
				1805211710u,
				3710368113u,
				3065962831u,
				401639597u,
				1724457132u,
				3028143674u,
				409198410u,
				2196052529u,
				1620529459u,
				1164071807u,
				3769721975u,
				2226875310u,
				486441376u,
				2499348523u,
				1483753576u,
				428819965u,
				2274680428u,
				3075636216u,
				598438867u,
				3799141122u,
				1474502543u,
				711349675u,
				129166120u,
				53458370u,
				2592523643u,
				2782082824u,
				4063242375u,
				2988687269u,
				3120694122u,
				1559041666u,
				730517276u,
				2460449204u,
				4042459122u,
				2706270690u,
				3446004468u,
				3573941694u,
				533804130u,
				2328143614u,
				2637442643u,
				2695033685u,
				839224033u,
				1973745387u,
				957055980u,
				2856345839u,
				106852767u,
				1371368976u,
				4181598602u,
				1033297158u,
				2933734917u,
				1179510461u,
				3046200461u,
				91341917u,
				1862534868u,
				4284502037u,
				605657339u,
				2547432937u,
				3431546947u,
				2003294622u,
				3182487618u,
				2282195339u,
				954669403u,
				3682191598u,
				1201765386u,
				3917234703u,
				3388507166u,
				0u,
				2198438022u,
				1211247597u,
				2887651696u,
				1315723890u,
				4227665663u,
				1443857720u,
				507358933u,
				657861945u,
				1678381017u,
				560487590u,
				3516619604u,
				975451694u,
				2970356327u,
				261314535u,
				3535072918u,
				2652609425u,
				1333838021u,
				2724322336u,
				1767536459u,
				370938394u,
				182621114u,
				3854606378u,
				1128014560u,
				487725847u,
				185469197u,
				2918353863u,
				3106780840u,
				3356761769u,
				2237133081u,
				1286567175u,
				3152976349u,
				4255350624u,
				2683765030u,
				3160175349u,
				3309594171u,
				878443390u,
				1988838185u,
				3704300486u,
				1756818940u,
				1673061617u,
				3403100636u,
				272786309u,
				1075025698u,
				545572369u,
				2105887268u,
				4174560061u,
				296679730u,
				1841768865u,
				1260232239u,
				4091327024u,
				3960309330u,
				3497509347u,
				1814803222u,
				2578018489u,
				4195456072u,
				575138148u,
				3299409036u,
				446754879u,
				3629546796u,
				4011996048u,
				3347532110u,
				3252238545u,
				4270639778u,
				915985419u,
				3483825537u,
				681933534u,
				651868046u,
				2755636671u,
				3828103837u,
				223377554u,
				2607439820u,
				1649704518u,
				3270937875u,
				3901806776u,
				1580087799u,
				4118987695u,
				3198115200u,
				2087309459u,
				2842678573u,
				3016697106u,
				1003007129u,
				2802849917u,
				1860738147u,
				2077965243u,
				164439672u,
				4100872472u,
				32283319u,
				2827177882u,
				1709610350u,
				2125135846u,
				136428751u,
				3874428392u,
				3652904859u,
				3460984630u,
				3572145929u,
				3593056380u,
				2939266226u,
				824852259u,
				818324884u,
				3224740454u,
				930369212u,
				2801566410u,
				2967507152u,
				355706840u,
				1257309336u,
				4148292826u,
				243256656u,
				790073846u,
				2373340630u,
				1296297904u,
				1422699085u,
				3756299780u,
				3818836405u,
				457992840u,
				3099667487u,
				2135319889u,
				77422314u,
				1560382517u,
				1945798516u,
				788204353u,
				1521706781u,
				1385356242u,
				870912086u,
				325965383u,
				2358957921u,
				2050466060u,
				2388260884u,
				2313884476u,
				4006521127u,
				901210569u,
				3990953189u,
				1014646705u,
				1503449823u,
				1062597235u,
				2031621326u,
				3212035895u,
				3931371469u,
				1533017514u,
				350174575u,
				2256028891u,
				2177544179u,
				1052338372u,
				741876788u,
				1606591296u,
				1914052035u,
				213705253u,
				2334669897u,
				1107234197u,
				1899603969u,
				3725069491u,
				2631447780u,
				2422494913u,
				1635502980u,
				1893020342u,
				1950903388u,
				1120974935u
			};
		}

		private static void c()
		{
			ag = new uint[256]
			{
				2807058932u,
				1699970625u,
				2764249623u,
				1586903591u,
				1808481195u,
				1173430173u,
				1487645946u,
				59984867u,
				4199882800u,
				1844882806u,
				1989249228u,
				1277555970u,
				3623636965u,
				3419915562u,
				1149249077u,
				2744104290u,
				1514790577u,
				459744698u,
				244860394u,
				3235995134u,
				1963115311u,
				4027744588u,
				2544078150u,
				4190530515u,
				1608975247u,
				2627016082u,
				2062270317u,
				1507497298u,
				2200818878u,
				567498868u,
				1764313568u,
				3359936201u,
				2305455554u,
				2037970062u,
				1047239000u,
				1910319033u,
				1337376481u,
				2904027272u,
				2892417312u,
				984907214u,
				1243112415u,
				830661914u,
				861968209u,
				2135253587u,
				2011214180u,
				2927934315u,
				2686254721u,
				731183368u,
				1750626376u,
				4246310725u,
				1820824798u,
				4172763771u,
				3542330227u,
				48394827u,
				2404901663u,
				2871682645u,
				671593195u,
				3254988725u,
				2073724613u,
				145085239u,
				2280796200u,
				2779915199u,
				1790575107u,
				2187128086u,
				472615631u,
				3029510009u,
				4075877127u,
				3802222185u,
				4107101658u,
				3201631749u,
				1646252340u,
				4270507174u,
				1402811438u,
				1436590835u,
				3778151818u,
				3950355702u,
				3963161475u,
				4020912224u,
				2667994737u,
				273792366u,
				2331590177u,
				104699613u,
				95345982u,
				3175501286u,
				2377486676u,
				1560637892u,
				3564045318u,
				369057872u,
				4213447064u,
				3919042237u,
				1137477952u,
				2658625497u,
				1119727848u,
				2340947849u,
				1530455833u,
				4007360968u,
				172466556u,
				266959938u,
				516552836u,
				0u,
				2256734592u,
				3980931627u,
				1890328081u,
				1917742170u,
				4294704398u,
				945164165u,
				3575528878u,
				958871085u,
				3647212047u,
				2787207260u,
				1423022939u,
				775562294u,
				1739656202u,
				3876557655u,
				2530391278u,
				2443058075u,
				3310321856u,
				547512796u,
				1265195639u,
				437656594u,
				3121275539u,
				719700128u,
				3762502690u,
				387781147u,
				218828297u,
				3350065803u,
				2830708150u,
				2848461854u,
				428169201u,
				122466165u,
				3720081049u,
				1627235199u,
				648017665u,
				4122762354u,
				1002783846u,
				2117360635u,
				695634755u,
				3336358691u,
				4234721005u,
				4049844452u,
				3704280881u,
				2232435299u,
				574624663u,
				287343814u,
				612205898u,
				1039717051u,
				840019705u,
				2708326185u,
				793451934u,
				821288114u,
				1391201670u,
				3822090177u,
				376187827u,
				3113855344u,
				1224348052u,
				1679968233u,
				2361698556u,
				1058709744u,
				752375421u,
				2431590963u,
				1321699145u,
				3519142200u,
				2734591178u,
				188127444u,
				2177869557u,
				3727205754u,
				2384911031u,
				3215212461u,
				2648976442u,
				2450346104u,
				3432737375u,
				1180849278u,
				331544205u,
				3102249176u,
				4150144569u,
				2952102595u,
				2159976285u,
				2474404304u,
				766078933u,
				313773861u,
				2570832044u,
				2108100632u,
				1668212892u,
				3145456443u,
				2013908262u,
				418672217u,
				3070356634u,
				2594734927u,
				1852171925u,
				3867060991u,
				3473416636u,
				3907448597u,
				2614737639u,
				919489135u,
				164948639u,
				2094410160u,
				2997825956u,
				590424639u,
				2486224549u,
				1723872674u,
				3157750862u,
				3399941250u,
				3501252752u,
				3625268135u,
				2555048196u,
				3673637356u,
				1343127501u,
				4130281361u,
				3599595085u,
				2957853679u,
				1297403050u,
				81781910u,
				3051593425u,
				2283490410u,
				532201772u,
				1367295589u,
				3926170974u,
				895287692u,
				1953757831u,
				1093597963u,
				492483431u,
				3528626907u,
				1446242576u,
				1192455638u,
				1636604631u,
				209336225u,
				344873464u,
				1015671571u,
				669961897u,
				3375740769u,
				3857572124u,
				2973530695u,
				3747192018u,
				1933530610u,
				3464042516u,
				935293895u,
				3454686199u,
				2858115069u,
				1863638845u,
				3683022916u,
				4085369519u,
				3292445032u,
				875313188u,
				1080017571u,
				3279033885u,
				621591778u,
				1233856572u,
				2504130317u,
				24197544u,
				3017672716u,
				3835484340u,
				3247465558u,
				2220981195u,
				3060847922u,
				1551124588u,
				1463996600u
			};
		}

		private static void b()
		{
			ah = new uint[256]
			{
				4104605777u,
				1097159550u,
				396673818u,
				660510266u,
				2875968315u,
				2638606623u,
				4200115116u,
				3808662347u,
				821712160u,
				1986918061u,
				3430322568u,
				38544885u,
				3856137295u,
				718002117u,
				893681702u,
				1654886325u,
				2975484382u,
				3122358053u,
				3926825029u,
				4274053469u,
				796197571u,
				1290801793u,
				1184342925u,
				3556361835u,
				2405426947u,
				2459735317u,
				1836772287u,
				1381620373u,
				3196267988u,
				1948373848u,
				3764988233u,
				3385345166u,
				3263785589u,
				2390325492u,
				1480485785u,
				3111247143u,
				3780097726u,
				2293045232u,
				548169417u,
				3459953789u,
				3746175075u,
				439452389u,
				1362321559u,
				1400849762u,
				1685577905u,
				1806599355u,
				2174754046u,
				137073913u,
				1214797936u,
				1174215055u,
				3731654548u,
				2079897426u,
				1943217067u,
				1258480242u,
				529487843u,
				1437280870u,
				3945269170u,
				3049390895u,
				3313212038u,
				923313619u,
				679998000u,
				3215307299u,
				57326082u,
				377642221u,
				3474729866u,
				2041877159u,
				133361907u,
				1776460110u,
				3673476453u,
				96392454u,
				878845905u,
				2801699524u,
				777231668u,
				4082475170u,
				2330014213u,
				4142626212u,
				2213296395u,
				1626319424u,
				1906247262u,
				1846563261u,
				562755902u,
				3708173718u,
				1040559837u,
				3871163981u,
				1418573201u,
				3294430577u,
				114585348u,
				1343618912u,
				2566595609u,
				3186202582u,
				1078185097u,
				3651041127u,
				3896688048u,
				2307622919u,
				425408743u,
				3371096953u,
				2081048481u,
				1108339068u,
				2216610296u,
				0u,
				2156299017u,
				736970802u,
				292596766u,
				1517440620u,
				251657213u,
				2235061775u,
				2933202493u,
				758720310u,
				265905162u,
				1554391400u,
				1532285339u,
				908999204u,
				174567692u,
				1474760595u,
				4002861748u,
				2610011675u,
				3234156416u,
				3693126241u,
				2001430874u,
				303699484u,
				2478443234u,
				2687165888u,
				585122620u,
				454499602u,
				151849742u,
				2345119218u,
				3064510765u,
				514443284u,
				4044981591u,
				1963412655u,
				2581445614u,
				2137062819u,
				19308535u,
				1928707164u,
				1715193156u,
				4219352155u,
				1126790795u,
				600235211u,
				3992742070u,
				3841024952u,
				836553431u,
				1669664834u,
				2535604243u,
				3323011204u,
				1243905413u,
				3141400786u,
				4180808110u,
				698445255u,
				2653899549u,
				2989552604u,
				2253581325u,
				3252932727u,
				3004591147u,
				1891211689u,
				2487810577u,
				3915653703u,
				4237083816u,
				4030667424u,
				2100090966u,
				865136418u,
				1229899655u,
				953270745u,
				3399679628u,
				3557504664u,
				4118925222u,
				2061379749u,
				3079546586u,
				2915017791u,
				983426092u,
				2022837584u,
				1607244650u,
				2118541908u,
				2366882550u,
				3635996816u,
				972512814u,
				3283088770u,
				1568718495u,
				3499326569u,
				3576539503u,
				621982671u,
				2895723464u,
				410887952u,
				2623762152u,
				1002142683u,
				645401037u,
				1494807662u,
				2595684844u,
				1335535747u,
				2507040230u,
				4293295786u,
				3167684641u,
				367585007u,
				3885750714u,
				1865862730u,
				2668221674u,
				2960971305u,
				2763173681u,
				1059270954u,
				2777952454u,
				2724642869u,
				1320957812u,
				2194319100u,
				2429595872u,
				2815956275u,
				77089521u,
				3973773121u,
				3444575871u,
				2448830231u,
				1305906550u,
				4021308739u,
				2857194700u,
				2516901860u,
				3518358430u,
				1787304780u,
				740276417u,
				1699839814u,
				1592394909u,
				2352307457u,
				2272556026u,
				188821243u,
				1729977011u,
				3687994002u,
				274084841u,
				3594982253u,
				3613494426u,
				2701949495u,
				4162096729u,
				322734571u,
				2837966542u,
				1640576439u,
				484830689u,
				1202797690u,
				3537852828u,
				4067639125u,
				349075736u,
				3342319475u,
				4157467219u,
				4255800159u,
				1030690015u,
				1155237496u,
				2951971274u,
				1757691577u,
				607398968u,
				2738905026u,
				499347990u,
				3794078908u,
				1011452712u,
				227885567u,
				2818666809u,
				213114376u,
				3034881240u,
				1455525988u,
				3414450555u,
				850817237u,
				1817998408u,
				3092726480u
			};
		}

		private new static void a()
		{
			ai = new byte[256]
			{
				99,
				124,
				119,
				123,
				242,
				107,
				111,
				197,
				48,
				1,
				103,
				43,
				254,
				215,
				171,
				118,
				202,
				130,
				201,
				125,
				250,
				89,
				71,
				240,
				173,
				212,
				162,
				175,
				156,
				164,
				114,
				192,
				183,
				253,
				147,
				38,
				54,
				63,
				247,
				204,
				52,
				165,
				229,
				241,
				113,
				216,
				49,
				21,
				4,
				199,
				35,
				195,
				24,
				150,
				5,
				154,
				7,
				18,
				128,
				226,
				235,
				39,
				178,
				117,
				9,
				131,
				44,
				26,
				27,
				110,
				90,
				160,
				82,
				59,
				214,
				179,
				41,
				227,
				47,
				132,
				83,
				209,
				0,
				237,
				32,
				252,
				177,
				91,
				106,
				203,
				190,
				57,
				74,
				76,
				88,
				207,
				208,
				239,
				170,
				251,
				67,
				77,
				51,
				133,
				69,
				249,
				2,
				127,
				80,
				60,
				159,
				168,
				81,
				163,
				64,
				143,
				146,
				157,
				56,
				245,
				188,
				182,
				218,
				33,
				16,
				255,
				243,
				210,
				205,
				12,
				19,
				236,
				95,
				151,
				68,
				23,
				196,
				167,
				126,
				61,
				100,
				93,
				25,
				115,
				96,
				129,
				79,
				220,
				34,
				42,
				144,
				136,
				70,
				238,
				184,
				20,
				222,
				94,
				11,
				219,
				224,
				50,
				58,
				10,
				73,
				6,
				36,
				92,
				194,
				211,
				172,
				98,
				145,
				149,
				228,
				121,
				231,
				200,
				55,
				109,
				141,
				213,
				78,
				169,
				108,
				86,
				244,
				234,
				101,
				122,
				174,
				8,
				186,
				120,
				37,
				46,
				28,
				166,
				180,
				198,
				232,
				221,
				116,
				31,
				75,
				189,
				139,
				138,
				112,
				62,
				181,
				102,
				72,
				3,
				246,
				14,
				97,
				53,
				87,
				185,
				134,
				193,
				29,
				158,
				225,
				248,
				152,
				17,
				105,
				217,
				142,
				148,
				155,
				30,
				135,
				233,
				206,
				85,
				40,
				223,
				140,
				161,
				137,
				13,
				191,
				230,
				66,
				104,
				65,
				153,
				45,
				15,
				176,
				84,
				187,
				22
			};
			aj = new byte[256]
			{
				82,
				9,
				106,
				213,
				48,
				54,
				165,
				56,
				191,
				64,
				163,
				158,
				129,
				243,
				215,
				251,
				124,
				227,
				57,
				130,
				155,
				47,
				255,
				135,
				52,
				142,
				67,
				68,
				196,
				222,
				233,
				203,
				84,
				123,
				148,
				50,
				166,
				194,
				35,
				61,
				238,
				76,
				149,
				11,
				66,
				250,
				195,
				78,
				8,
				46,
				161,
				102,
				40,
				217,
				36,
				178,
				118,
				91,
				162,
				73,
				109,
				139,
				209,
				37,
				114,
				248,
				246,
				100,
				134,
				104,
				152,
				22,
				212,
				164,
				92,
				204,
				93,
				101,
				182,
				146,
				108,
				112,
				72,
				80,
				253,
				237,
				185,
				218,
				94,
				21,
				70,
				87,
				167,
				141,
				157,
				132,
				144,
				216,
				171,
				0,
				140,
				188,
				211,
				10,
				247,
				228,
				88,
				5,
				184,
				179,
				69,
				6,
				208,
				44,
				30,
				143,
				202,
				63,
				15,
				2,
				193,
				175,
				189,
				3,
				1,
				19,
				138,
				107,
				58,
				145,
				17,
				65,
				79,
				103,
				220,
				234,
				151,
				242,
				207,
				206,
				240,
				180,
				230,
				115,
				150,
				172,
				116,
				34,
				231,
				173,
				53,
				133,
				226,
				249,
				55,
				232,
				28,
				117,
				223,
				110,
				71,
				241,
				26,
				113,
				29,
				41,
				197,
				137,
				111,
				183,
				98,
				14,
				170,
				24,
				190,
				27,
				252,
				86,
				62,
				75,
				198,
				210,
				121,
				32,
				154,
				219,
				192,
				254,
				120,
				205,
				90,
				244,
				31,
				221,
				168,
				51,
				136,
				7,
				199,
				49,
				177,
				18,
				16,
				89,
				39,
				128,
				236,
				95,
				96,
				81,
				127,
				169,
				25,
				181,
				74,
				13,
				45,
				229,
				122,
				159,
				147,
				201,
				156,
				239,
				160,
				224,
				59,
				77,
				174,
				42,
				245,
				176,
				200,
				235,
				187,
				60,
				131,
				83,
				153,
				97,
				23,
				43,
				4,
				126,
				186,
				119,
				214,
				38,
				225,
				105,
				20,
				99,
				85,
				33,
				12,
				125
			};
		}
	}
}
